#include<bits/stdc++.h>
using namespace std;
long long t,n,m,L,cnt=0,ha=0,V,cctv[100010],ton[100010];//车辆数量、测速仪数量、主干道长度和道路限速。
bool flag=true;
struct traffic{
    long long d,v,a,moreplace,bo,leaveplace;
}car[100010];
void solve(){
    int k=1;
    for(int i=1;i<=n;i++){
        if(car[i].v>V)cnt++;
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=m;j++){
            if(car[j].v>V&&cctv[i]<car[j].d){
                ha++;
            }
        }
    }
    cout<<cnt<<" "<<m-ha<<endl;
}
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    cin>>t;
    while(t--){
        cnt=0;ha=0;flag=true;
        cin>>n>>m>>L>>V;//d i 的位置驶入,以 v i 的初速度和 a i 的加速度做匀加速运动
        for(int i=1;i<=n;i++){
            cin>>car[i].d>>car[i].v>>car[i].a;
            if(car[i].a!=0)flag=false;
            if(car[i].a==0)car[i].moreplace=INT_MAX;
            else if(car[i].a<0&&car[i].v>V){
                car[i].leaveplace=car[i].d+(pow(V,2)-pow(car[i].v,2))/(2*car[i].a);
                car[i].moreplace=car[i].d;
            }
            else if(car[i].a<0){
                car[i].leaveplace=INT_MIN;
                car[i].moreplace=INT_MAX;
            }
            else {
                    car[i].leaveplace=L;
                    car[i].moreplace=car[i].d+(pow(V,2)-pow(car[i].v,2))/(2*car[i].a);
            }
           // if(car[i].a<0)car[i].leaveplace=min(car[i].d -floor(pow(car[i].v,2)/(2*car[i].a)),car[i].d -floor((pow(V-1,2)-pow(car[i].v,2))/(2*car[i].a)));
           // else car[i].leaveplace=L;
            car[i].bo=0;

        } if(flag)solve();
        for(int i=1;i<=m;i++){
            cin>>cctv[i];
            ton[cctv[i]]=0;
        }
        //
        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                if(((cctv[i]>=car[j].moreplace&&cctv[i]<car[j].leaveplace)||(car[j].a==0&&car[j].v>V))&&car[j].bo==0){
                    car[j].bo=cctv[i];
                    cnt++;
                }
            }
        }
        //
        for(int i=1;i<=n;i++){
            ton[car[i].bo]++;
        }
        for(int i=1;i<=m;i++){
            if(ton[cctv[i]]==0)ha++;
        }

        cout<<cnt<<" "<<m-ha+1<<endl;
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}
